﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
//int main()
//{
//	int n = 0;
//	int count = 0;
//	scanf("%d", &n);
//	while (n)
//	{
//		if (n % 2 == 1)
//		{
//			count++;
//		}
//		n /= 2;
//	}
//	printf("正整数n在内存中共有 %d个1", count);
//	return 0;
//}
//以上代码只能计算正整数有多少个1；


//优化
//int main()
//{
//	unsigned int n = 0;
//	int count = 0;
//	scanf("%d", &n);
//	while (n)
//	{
//		if (n % 2 == 1)
//		{
//			count++;
//		}
//		n /= 2;
//	}
//	printf("整数n在内存中共有 %d个1", count);
//	return 0;
//}


//int main()
//{
//	int n = 0;
//	int i = 0;
//	int count = 0;            
//	scanf("%d", &n);          
//	for (i = 0; i < 32; i++)
//	{
//		if ((n & (1 << i)))
//			count++;
//	}
//	printf("%d", count);
//	return 0;
//}

//n=n&(n-1)
//int main()                  //110
//{                           //101
//	int n = 0;
//	int count = 0;
//	scanf("%d", &n);
//	while (n)
//	{
//		n = n & (n - 1);
//		count++;
//	}
//	printf("%d", count);
//	return 0;
//}




//int main()
//{
//	int n = 0;
//	int m = 0;
//	scanf("%d %d", &n, &m);
//	int ret = m ^ n;
//	int count = 0;
//	while (ret)
//	{
//		ret = ret & (ret - 1);
//		count++;
//	}
//	printf("%d", count);
//
//	return 0;
//}
//通过按位异或能够将两个整数有多少个不同的bit位用1表示，
// 再通过式子n=n&(n-1)来找出有多少个
//1，代表有几个位不同；






//int main()
//{
//
//	int n = 0;
//	scanf("%d", &n);
//	if ((n & (n - 1)) == 0)
//	{
//		printf("n是2的次方数");
//	}
//	else
//		printf("n不是2的次方数");
//	return 0;
//}

//判断一个数是否为2的次方数




//编写代码将13⼆进制序列的第5位修改为1，然后再改回0
//int main()
//{
//	int x = 0;
//	int y = 1;
//	scanf("%d", &x);
//	x = x | (y << 4);
//	printf("%d\n", x);
//	x = x & (~(y << 4));
//	printf("%d\n", x);
//	return 0;
//}


青蛙跳台阶
int Find(int n)
{
	int a = 1;
	int b = 2;
	int c = 0;
	if (n == 1)
	{
		return 1;
	}
	else if (n == 2)
	{
		return 2;
	}
	else
	{
		while (n>2)
		{
			c = a + b;
			a = b;
			b = c;
			n--;
			
		}
		return c;
	}
}

int main()
{
	int n = 0;
	scanf("%d", &n);
	int ret = Find(n);
	printf("%d", ret);
	return 0;
}
动态规划：用上一步的结果，快速的到下一步的结果；

//int main()
//{
//	
//	return 0;
//}